using Admin.Application.Common;
using Admin.Application.Dto;
using Admin.Application.Dto.Permission;
namespace Admin.Application.Repositories;

/// <summary>
/// 权限服务接口，提供权限相关的业务逻辑操作。
/// </summary>
public interface IPermissionService
{
    /// <summary>
    /// 添加一个新的权限。
    /// </summary>
    /// <param name="permissionDto">权限的数据传输对象，包含权限的基本信息，如名称、描述等。</param>
    /// <returns>
    /// 返回一个 <see cref="Result{T}"/> 对象，其中包含操作结果。
    /// - 成功时，返回包含成功消息的 <see cref="Result{T}"/>。
    /// - 失败时，返回包含错误消息的 <see cref="Result{T}"/>。
    /// </returns>
    Task<Result<string>> AddPermissionAsync(PermissionDto permissionDto);

    /// <summary>
    /// 删除一个权限。
    /// </summary>
    /// <param name="permissionId">要删除的权限的唯一标识符。</param>
    /// <returns>
    /// 返回一个 <see cref="Result{T}"/> 对象，其中包含操作结果。
    /// - 成功时，返回包含成功消息的 <see cref="Result{T}"/>。
    /// - 失败时，返回包含错误消息的 <see cref="Result{T}"/>。
    /// </returns>
    Task<Result<string>> DeletePermissionAsync(Guid permissionId);

    /// <summary>
    /// 更新一个权限的信息。
    /// </summary>
    /// <param name="permissionId">要更新的权限的唯一标识符。</param>
    /// <param name="permissionDto">包含更新后权限信息的数据传输对象。</param>
    /// <returns>
    /// 返回一个 <see cref="Result{T}"/> 对象，其中包含操作结果。
    /// - 成功时，返回包含成功消息的 <see cref="Result{T}"/>。
    /// - 失败时，返回包含错误消息的 <see cref="Result{T}"/>。
    /// </returns>
    Task<Result<string>> UpdatePermissionAsync(Guid permissionId, PermissionDto permissionDto);

    /// <summary>
    /// 获取分页的权限列表。
    /// </summary>
    /// <param name="pageIndex">分页的页码，从 1 开始。</param>
    /// <param name="pageSize">每页显示的权限数量。</param>
    /// <returns>
    /// 返回一个 <see cref="Result{T}"/> 对象，其中包含分页的权限列表。
    /// - 成功时，返回包含权限列表的 <see cref="Result{T}"/>。
    /// - 失败时，返回包含错误消息的 <see cref="Result{T}"/>。
    /// </returns>
    Task<Result<List<ResPermissionDto>>> GetPagedPermissionAsync(int pageIndex, int pageSize);

    /// <summary>
    /// 根据权限 ID 获取权限的详细信息。
    /// </summary>
    /// <param name="permissionId">权限的唯一标识符。</param>
    /// <returns>
    /// 返回一个 <see cref="Result{T}"/> 对象，其中包含权限的详细信息。
    /// - 成功时，返回包含权限信息的 <see cref="Result{T}"/>。
    /// - 失败时，返回包含错误消息的 <see cref="Result{T}"/>。
    /// </returns>
    Task<Result<ResPermissionDto?>> GetPermissionByIdAsync(Guid permissionId);

    /// <summary>
    /// 异步更新权限启用状态。
    /// </summary>
    /// <param name="permissionId">要更新的部门的ID。</param>
    /// <param name="activeDto">包含更新信息的启用状态数据传输对象，如是否启用。</param>
    /// <returns>
    /// 返回一个 <see cref="Result{T}"/> 对象，其中包含操作结果。
    /// - 成功时，返回包含成功消息的 <see cref="Result{T}"/>。
    /// - 失败时，返回包含错误消息的 <see cref="Result{T}"/>。
    /// </returns>
    Task<Result<string>> UpdateIsActive(Guid permissionId, ActiveDto activeDto);

}